﻿using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Parametro.Parametro;

namespace Sinacor.UI.Bovespa.Ordens.Communication
{
    public class Parametro : BaseCommunication
    {
        #region Contrutor
        public Parametro(SessionInformation sessionInformation)
            : base(sessionInformation)
        {
        }
        #endregion Contrutor

        #region Metodo
        /// <summary>
        /// Recupera se o sistema esta parametrizado para aceitar o digito verificador do cliente
        /// Usado em: View.ManutencaoOrdem
        /// </summary>
        /// <returns></returns>
        public Model.Parametro RecuperarIndicadorDigitoCliente()
        {
            IParametro objIParametro = null;
            Model.Parametro objParametro = null;

            try
            {
                using (ServiceInstance<IParametro> serviceManager = new ServiceInstance<IParametro>())
                {
                    objIParametro = serviceManager.TryGetInstance(this.Session);
                    objParametro = new Translator.ParametroToModel().Translate(objIParametro.RecuperarIndicadorDigitoCliente());
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
            return objParametro;
        }

        /// <summary>
        /// Recupera se o sistema esta parametrizado para aceitar o digito verificador do cliente
        /// Usado em: View.ManutencaoOrdem
        /// </summary>
        /// <returns></returns>
        public string RecuperarAdministradorConcorrente()
        {
            IParametro objIParametro = null;
            string sIndicadorAdministradoConcorrente = string.Empty;

            try
            {
                using (ServiceInstance<IParametro> serviceManager = new ServiceInstance<IParametro>())
                {
                    objIParametro = serviceManager.TryGetInstance(this.Session);
                    sIndicadorAdministradoConcorrente = objIParametro.RecuperarIndicadorAdministradoConcorrente();
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
            return sIndicadorAdministradoConcorrente;
        }

        /// <summary>
        /// Recupera o indicador de preechimento automatico do tipo de liquidação
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorTipoLiquidacaoCustodianteAutomatico()
        {
            string sParametro = string.Empty;
            IParametro objIParametro = null;

            try
            {
                using (ServiceInstance<IParametro> serviceManager = new ServiceInstance<IParametro>())
                {
                    objIParametro = serviceManager.TryGetInstance(this.Session);
                    sParametro = objIParametro.RecuperarIndicadorTipoLiquidacaoCustodianteAutomatico();
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
            return sParametro;
        }

        /// <summary>
        /// Recupera a verificação de bloqueio de cliente
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorBloqueio()
        {
            IParametro objIParametro = null;
            string sParametro = string.Empty;

            try
            {
                using (ServiceInstance<IParametro> serviceManager = new ServiceInstance<IParametro>())
                {
                    objIParametro = serviceManager.TryGetInstance(this.Session);
                    sParametro = objIParametro.RecuperarIndicadorBloqueio();
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }
            return sParametro;
        }
        #endregion Metodo
    }
}